package com.wanshu.sys.service;

import com.wanshu.sys.model.SysRoleQueryDto;
import com.wanshu.common.util.PageUtils;
import com.wanshu.sys.entity.SysRole;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wanshu.sys.model.res.roleMenuTree.RoleMenuTreeRes;

import java.util.List;

/**
 * <p>
 * 角色 服务类
 * </p>
 *
 * @author 波哥
 * @since 2023-05-09
 */
public interface ISysRoleService extends IService<SysRole> {

    /**
     * 分页查询
     *
     * @param sysRoleQueryDto 系统角色查询dto
     * @return {@link PageUtils }
     * @author 张颖辉（zyh）
     * @date 2023/06/01
     * @version 1.0.0
     */
    PageUtils<SysRole> queryPage(SysRoleQueryDto sysRoleQueryDto);

    /**
     * 是否存在角色名
     * 是否存在角色名称，但不是当前的角色
     * @param sysRole 角色
     * @return {@link Boolean }
     * @author 张颖辉（zyh）
     * @date 2023/06/01
     * @version 1.0.0
     */
    Boolean existRoleName(SysRole sysRole);

    /**
     * 保存角色
     *
     * @param sysRole 系统作用
     * @author 张颖辉（zyh）
     * @date 2023/06/05
     * @version 1.0.0
     */
    void saveRole(SysRole sysRole);

    /**
     * 更新
     *
     * @param sysRole 系统作用
     * @author 张颖辉（zyh）
     * @date 2023/06/05
     * @version 1.0.0
     */
    void update(SysRole sysRole);

    /**
     * 删除通过id
     *
     * @param roleId 角色id
     * @return {@link Boolean }
     * @author 张颖辉（zyh）
     * @date 2023/06/06
     * @version 1.0.0
     */
    Boolean deleteById(Long roleId);

    /**
     * 根据用户id查询角色集合
     *
     * @param userId 用户id
     * @return {@link List }<{@link SysRole }>
     * @author 张颖辉（zyh）
     * @date 2023/06/28
     * @version 1.0.0
     */
    List<SysRole> queryByUserId(Long userId);

    /**
     * 调度程序角色菜单
     *
     * 返回内容：
     * 1、全部菜单
     * 2、根据角色菜单查询角色关联的菜单
     *
     * @param roleId 角色id
     * @return {@link RoleMenuTreeRes }
     * @author 张颖辉（zyh）
     * @date 2023/07/12
     * @version 1.0.0
     */
    RoleMenuTreeRes dispatcherRoleMenu(Long roleId);
}
